#include <stdio.h>

#define NODES_NR 64
typedef int node; // typ node (int)
void nodestab_print(node* , int , int ); // wydruk
#define key(A) (A) // wyznaczony klucz

void merge(node* , int , int , int );
void tdmerge_sort(node* , int , int );

int main()
{
  node nodestab[] = {6, 9, 8, 7, 4, 1, 2};
  tdmerge_sort(nodestab, 0, 6);
  //nodestab_print(nodestab, 0, 7);    
  return 0; 
}

// wezly
void nodestab_print(node a[], int l, int r)
{
  int i;
  for (i = l; i < r; i++) 
    printf("%i ", a[i]);
  printf("\n");
};

// sortowanie
void merge(node a[], int l, int m, int r)
{
  int i, j, k;
  node aux[NODES_NR];
  for (i = m+1; i > l; i--) 
    aux[i-1] = a[i-1];
  for (j = m; j < r; j++) 
    aux[r+m-j] = a[j+1];
  for (k = l; k <= r; k++) 
    if (key(aux[j]) < key(aux[i]))
      a[k] = aux[j--];
    else
      a[k] = aux[i++];
}

void tdmerge_sort(node a[], int l, int r)
{
  int m;
  if (r <= l) return;
  m = (r+l)/2;
  tdmerge_sort(a, l, m);
  tdmerge_sort(a, m+1, r);
  merge(a, l, m, r);        
}

